package com.utility.project.common.utils;

import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author zouke
 * @date 2022/12/29 15:48
 * @description String 工具类. 继承StrUtil类,重写扩展一些类
 */
public class ProjStrUtil extends StrUtil {

    public static final String DEFAULT_SEPARATOR = ",";

    /***
     * hutools工具类中toString方法处理空存在bug
     * 
     * @author zouke
     * @date 2022/12/29 15:52
     * @return string
     */
    public static String toString(Object obj) {
        return obj == null ? "" : obj.toString();
    }

    /***
     * 对象转Stirng
     * 
     * @author zouke
     * @date 2023/2/8 15:00
     * @param obj
     * @param defaultString obj 为空的时候,返回defaultString
     * @return
     */
    public static String toString(Object obj, String defaultString) {
        return obj == null ? defaultString : obj.toString();
    }


    /***
     * 对象转json,如果可以转成功
     *
     * @author zouke
     * @date 2022/12/29 15:52
     * @return string
     */
    public static String toJsonStringIfCan(Object obj) {
        if (obj != null) {
            try {
                String result = JSONUtil.toJsonPrettyStr(obj);
                return result;
            } catch (Exception e) {
                // 如记录异常
            }
            return toString(obj);
        }
        return "";
    }

    /**
     * @description 过滤特殊字符，只允许字母和数字
     * @author liujinchao
     * @date 2023/2/13 18:06
     * @param str 被过滤字符
     * @return String 过滤结果
     */
    public static String stringCharAndNumFilter(String str) {
        // 只允许字母和数字 // String regEx ="[^a-zA-Z0-9]";
        // 清除掉所有特殊字符
        String regEx = "[`~!@#$%^&*()+=|{}':;\"',\\\\ .<>/?~！@#￥%……&*（）_——+|{}【】‘；：”“’。 ，、？]";
        Pattern p = Pattern.compile(regEx);
        Matcher m = p.matcher(str);
        return m.replaceAll("").trim();
    }


    /***
     * 解析整数
     * 
     * @author zouke
     * @date 2023/3/20 16:11
     * @param s 数字字符串
     * @param defaultValue 默认值
     * @return
     */
    public static Integer parseInt(String s, Integer defaultValue) {
        if (NumberUtil.isInteger(s)) {
            return NumberUtil.parseInt(s);
        } else {
            return defaultValue;
        }
    }


}
